package Decorator;

/**
 * 装饰器模式可拓展性强，在不改变原有对象的情况下，动态的给一个对象扩展功能，即插即用。同时，易于维护，哪个功能出问题直接找相关代码即可。
 * 通过使用不用装饰类及这些装饰类的排列组合，可以实现不同效果。
 * 装饰器模式会增加许多子类，会使得代码变得繁多增加程序的复杂性。
 */

public class Client {

    public static void main(String[] args) {

        //基本咖啡
        Coffee simpleCoffee = new SimpleCoffee();
        System.out.println("simpleCoffee" + simpleCoffee.getDescription() + "，cost：" + simpleCoffee.getCost());

        //咖啡 + 牛奶
        Coffee milkCoffee = new MilkDecorator(simpleCoffee);
        System.out.println("milkCoffee：" + milkCoffee.getDescription() + "，cost：" + milkCoffee.getCost());

        //咖啡 + 牛奶 + 糖
        Coffee syrupCoffee = new SyrupDecorator(milkCoffee);
        System.out.println("syrupCoffee + milkCoffee：" + syrupCoffee.getDescription() + "，cost：" + syrupCoffee.getCost());

    }

}
